Sniffer e TCP/IP


Normalmente solo l'interfaccia del destinatario passa i dati allo strato superiore, quindi i dati che passano sul cavo di rete vengono presi solo dalla macchina il cui indirizzo IP e/o MAC fa matching con quello contenuto nell'header del frame:

 

Dalla figura si vede come la macchina dell'utente A (il Link Layer A) non fa passare il pacchetto e quindi non trasferisce nulla agli strati superiori; la macchina dell'utente B (Link Layer B), invece, essendo il destinatario del pacchetto, lo lascia passare e lo trasferisce agli strati superiori.

Le API del sistema operativo permettono di leggere tutto ciò che passa sul canale ponendo l'interfaccia di rete in modalità promiscua. In tal caso i dati vengono consegnati all'applicazione che li richiede in modo grezzo, senza che essi passino attraverso gli opportuni strati del protocollo. Resta a carico dello sniffer effettuare un'interpretazione dei pacchetti  e assemblare i dati. 

La figura mostra cosa accade all'interno di un Sistema Operativo: supponiamo di avere un'istanza di natscape associata dal sistema ad una determinata porta; ora questa istanza passa attraverso il protocollo TCP/IP prima di accedere al cavo. A questo punto, attraverso il dispositivo Ethernet, viene fatta una copia dei pacchetti inviati e dei pacchetti ricevuti e poichè il programma di Sniffing "TCPdump" ha settato l'intefaccia in modalità promiscua, tutti i dati saranno consegnati a questa applicazione attraverso il filtro del Sistema Operativo.

Nei sistemi Unix la programmazione di rete avviene mediante i socket.  Mediante queste API il programmatore ottiene un controllo più o meno elevato della comunicazione in rete, ma deve anche gestire molti dettagli implementativi. Esistono per questo molte librerie che semplificano l'utilizzo della rete. La libreria pcap (Packet Capture) rende relativamente semplice la cattura dei pacchetti. Molti sistemi hanno già installate le  pcap, che sono comunque disponibili gratuitamente su Internet. Questa libreria offre un'interfaccia di programmazione per la cattura dei pacchetti di facile utilizzo e indipendente dal tipo di dispositivo di rete.

 

TCP/IP  agevola gli sniffer

TCP/IP non offre nessun meccanismo di verifica o protezione dei dati. I dati viaggiano in chiaro e non è fornito nessun modo per garantire l'autenticità degli interlocutori, sebbene ciò possa essere fatto dalle applicazioni.

Ciascuna macchina su cui viaggiano i dati potrebbe visualizzarli o anche modificarli. Se un'applicazione gestisce a basso livello la connessione può addirittura falsificare la propria identità in quanto TCP/IP si fida semplicemente dell'indirizzo specificato dal mittente. Anche a livello applicativo non vengono ancora adottati automaticamente strumenti per garantire l'autenticità e la privacy dei dati. Recentemente alcune applicazioni stanno ponendo maggiore attenzione al problema. Con alcune applicazioni per la gestione della posta elettronica  è possibile apporre la propria firma. Un'altra caratteristica di TCP/IP utilizzata dagli sniffer è il numero di sequenza dei segmenti TCP. Tale numero viene scambiato tra i due lati della connessione TCP per garantire l'ordine e il regolare flusso dei pacchetti. La determinazione del valore iniziale di tale numero dipende da alcuni fattori delle macchine che si connettono e viene incrementato ogni volta che si invia un pacchetto. Supponiamo che Alice e Bob abbiano stabilito una connessione. Si sono quindi scambiati i rispettivi numeri di sequenza. Supponiamo che Mark voglia inviare dei pacchetti ad Alice spacciandosi per Bob. Specificare l'indirizzo di Bob come mittente non è un problema ma se il numero di sequenza inviato da Mark non rispetta quelli scambiati tra Alice e Bob il pacchetto di Mark sarà scartato e verrà inviato da Alice a Bob un messaggio di errore.

Uno sniffer però conosce i numeri di sequenza, in quanto viaggiano in chiaro, può quindi usarli per sostituirsi ad un altro utente. Lo sniffer prima ascolta e conserva i numeri di sequenza di una connessione TCP poi, ponendo un attacco DoS, ad esempio al client, lo rende incapace di comunicare con il server. Nel frattempo si intromette nella comunicazione sostituendosi al client. In questo modo, anche se il server ha effettuato un riconoscimento, magari cifrato, l'intruso potrebbe continuare le operazioni spacciandosi per il client senza che il server possa accorgersene.